const koa = require('koa')

const Router = require('koa-router')

// 用来处理post传来的参数
const bodyParser = require('koa-bodyparser')

const app = new koa();

const router = new Router();

const jwt = require('jsonwebtoken')

// 获取用户信息
const { userList } = require('./mock')

// 处理post传的参数
app.use(bodyParser())

router.get('/api/test', (ctx) => {
    ctx.body = {
        code: 1,
        msg: '请求成功'
    }
})

// 登录接口
router.post('/api/login', (ctx) => {
    // 获取前端传来的参数
    const { username, password } = ctx.request.body;

    if (userList.some(item => item.username === username && item.password === password)) {
        const token = jwt.sign(username, '1908A')

        ctx.body = {
            code: 1,
            token
        }
    } else {
        // 更改网络状态
        ctx.status = 401;
        ctx.body = {
            code: 0,
            msg: '用户名或密码错误'
        }
    }


})

// 获取用户信息
router.get('/api/getUserInfo', (ctx) => {

    const { authorization } = ctx.request.header;

    // 容错处理
    try {
        // admin
        const username = jwt.verify(authorization, '1908A');

        ctx.body = {
            code: 1,
            // 从userList中寻找用户信息 并且返回
            data: userList.find(item => item.username === username)
        }


    } catch (error) {
        // 如果解密失败 就会走catch，
        ctx.status = 401;

        ctx.body = {
            code: 0,
            msg: '登录已过期，请重新登录'
        }
    }
})

// 将所有的路由 或者 接口 挂载到app中
app.use(router.routes())

// 监听端口号 启动服务器
app.listen(3001, () => {
    // 启动成功的回调函数
    console.log('http://localhost:3001')
})